import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamAndLambdaExample2 {
    public static void main(String[] args) {
        //Arrays.asList用于将数组转换成一个固定大小的列表
        List<String> strings = Arrays.asList("ap", "ba", "cherry", "date", "elderbery");

        //将List转换为流（Stream），以便进行链式操作。流操作是中间操作，不会立即执行，而是返回一个流，以便进行后续操作。
        List<String> result = strings.stream()
                //对流中的每个元素（这里是字符串）应用String::toUpperCase方法引用，将字符串转换为大写。这也是一个中间操作。
                .map(String::toUpperCase)
                //对上一步转换后的流进行过滤，保留长度大于等于3的字符串。这同样是一个中间操作。
                .filter(s -> s.length() >= 3)
                //将流中的元素收集到一个新的List中。这是一个终端操作，因为它会触发前面所有中间操作的执行，并返回操作结果。
                .collect(Collectors.toList());
        //使用forEach方法和System.out::println方法引用遍历结果List，并将每个元素打印到控制台。
        result.forEach(System.out::println);
    }
}
